package cn.iocoder.yudao.module.wine.service.supplyinfo;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.wine.controller.admin.supplyinfo.vo.*;
import cn.iocoder.yudao.module.wine.controller.app.supplyinfo.vo.*;
import cn.iocoder.yudao.module.wine.controller.app.supplymarket.vo.InfoPageReqVO;
import cn.iocoder.yudao.module.wine.controller.app.supplymarket.vo.MarketInfoListPageReqVO;
import cn.iocoder.yudao.module.wine.dal.dataobject.countnameconfig.CountNameConfigDO;
import cn.iocoder.yudao.module.wine.dal.dataobject.supplyinfo.SupplyInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 供求信息 Service 接口
 *
 * @author 管理员
 */
public interface SupplyInfoService {

    /**
     * 创建供求信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSupplyInfo(@Valid SupplyInfoSaveReqVO createReqVO);

    /**
     * 更新供求信息
     *
     * @param updateReqVO 更新信息
     */
    void updateSupplyInfo(@Valid SupplyInfoSaveReqVO updateReqVO);

    /**
     * 删除供求信息
     *
     * @param id 编号
     */
    void deleteSupplyInfo(Long id);

    /**
     * 获得供求信息
     *
     * @param id 编号
     * @return 供求信息
     */
    SupplyInfoDO getSupplyInfo(Integer id);

    /**
     * 获得供求信息分页
     *
     * @param pageReqVO 分页查询
     * @return 供求信息分页
     */
    PageResult<SupplyInfoRespVO> getSupplyInfoPage(SupplyInfoPageReqVO pageReqVO);


    /**
     * 小程序添加供求信息
     * @param createReqVO
     * @return
     */
    Integer appCreateSupplyInfo(AppSupplyInfoSaveReqVO createReqVO);

    /**
     * 小程序下架供求信息
     * @param id
     */
    void appDeleteSupplyOrder(Long id);

    /**
     * 小程序修改供求信息
     * @param updateReqVO
     */
    void appUpdateSupplyInfo(SupplyInfoSaveReqVO updateReqVO);

    /**
     * 小程序供求信息列表
     * @param reqVO
     * @return
     */
    PageResult<SupplyInfoRespVO> selectList(AppSupplyInfoListReqVO reqVO);

    /**
     * 小程序获取我的供求信息列表
     * @param reqVO
     * @return
     */
    List<SupplyInfoRespVO> selectMySupplyInfoList(AppSupplyInfoListReqVO reqVO);

    /**
     * 小程序获取供求信息详情
     * @param id
     * @return
     */
    SupplyInfoRespVO appGetSupplyInfoData(Long id);

    /**
     * 担保供求信息
     * @param reqVO
     * @return
     */
    Boolean guaranteeSupplyInfo(AppCreateOrderReqVO reqVO);

    /**
     * 生成小程序码
     * @param supplyInfoId
     * @return
     */
    byte[] generateCode(Long supplyInfoId,Long userId);

    List<SupplyInfoRespVO> appGetSupplyInfoDataList(Long[] ids);

    byte[] getPosterCode(Long userId);

    List<SupplyInfoRespVO> getMarketSupplyInfoList(AppMarketReqVO reqVO);

    List<SupplyInfoRespVO> getUserSupplyInfoList(AppSupplyInfoListReqVO reqVO);

    List<SupplyInfoRespVO> getUserSupplyShareList(AppSupplyInfoListReqVO reqVO);

    PageResult<SupplyInfoRespVO> appGetSupplyMarketInfoList(MarketInfoListPageReqVO reqVo);

    void updateSupplyInfoStatus(SupplyInfoSaveReqVO updateReqVO);

    List<SupplyInfoDO> getSupplyInfoByDay(CountNameConfigDO countNameConfigDO);

    List<SupplyInfoRespVO> getHomePageSupplyInfoList(AppSupplyInfoListReqVO reqVO);

    PageResult<SupplyInfoRespVO> appGetSupplyMarketInfoPage(InfoPageReqVO reqVO);
}
